package com.mt.roll.wms.dispatch.taskPool;

import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @Author: 蔡翔
 * @Date: 2019/9/23 9:32
 * @Version 1.0
 */
public class QGSThreadPool {
//    public static AtomicInteger threadCount = new AtomicInteger();
//    public static ThreadPoolExecutor executor = new ThreadPoolExecutor(
//            200,          //核心线程数
//            400,     //最大线程数。
//            1L,      // 空闲线程存活时间  （这里是一分钟）
//            TimeUnit.MINUTES, // 空闲线程存货的时间单位
//            new ArrayBlockingQueue<>(200),  //一个指定上限的的阻塞队列，这个队列中存放着待执行的任务
//            new ThreadFactory() {
//                // 自定义一个线程工厂来给线程池里面的线程取名字
//                @Override
//                public Thread newThread(Runnable r) {
//                    return new Thread(r, "threadPool-opc-" + threadCount.incrementAndGet());
//                }
//            },
//            new RejectedExecutionHandler() {
//                // 自定义一个拒绝处理策略，安慰被线程池拒之门外的任务
//                @Override
//                public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
//                    System.out.println("opc read err："+r);
//                }
//            }
//    );


    public static ExecutorService machineHandExecutor = Executors.newFixedThreadPool(20);
    //创建一个定长线程池，可控制线程最大并发数，超出的线程会在队列中等待(先进先出原则)。
    //创建一个单线程的线程池，它只会用唯一的工作线程来执行任务，也就是相当于单线程串行执行多有任务，如果这一唯一的线程以为异常结束，那么会有一个新的线程来代替它。
    public static ExecutorService rgv1SinglePool = Executors.newSingleThreadExecutor();
    public static ExecutorService rgv2SinglePool = Executors.newSingleThreadExecutor();
}
